In the world of virtual computing, multiple virtual machines (VMs or guests) can be instantiated at a software level on a single physical computer (host computer). In various virtualization scenarios, a software component often called a hypervisor can act as an interface between the guests and the host operating system for some or all of the functions of the guests. In other virtualization implementations, there is no underlying host operating system running on the physical, host computer. In those situations, the hypervisor acts as an interface between the guests and the hardware of the host computer. Even where a host operating system is present, the hypervisor sometimes interfaces directly with the hardware for certain services. In some virtualization scenarios, the host itself is in the form of a guest (i.e., a virtual host) running on another host. The services described herein as being performed by a hypervisor are, under certain virtualization scenarios, performed by a component with a different name, such as “supervisor virtual machine,” “virtual machine manager (VMM),” “service partition,” or “domain 0 (dom0).” The name used to denote the component(s) performing specific functionality is not important.
In a virtualization environment, it is possible for guests to run different operating systems than the host. Some existing virtualization tools support some integration between a host and a guest running different operating systems at a client level. For example, VMware Fusion allows a Mac host to run a Windows guest. The Windows guest can be run in a full screen mode, in which case the user sees a typical Windows user interface. However, by using a feature of Fusion called Unity, Windows applications being run on the Windows guest appear alongside Mac applications running on the host, within a single, Mac based view. VMware Workstation is a similar product for Windows hosts, with a Unity feature that allows applications being run on guests with other operating systems (e.g., Linux) to appear on the Windows host desktop, alongside host applications. Parallels Desktop is a similar product. It has a Unity-like feature called Coherence.
For a number of reasons, the use of the Unity feature of Fusion or the Coherence feature of Parallels Desktop is common practice. Mac users often utilize Unity or Coherence to perform everyday tasks that are best accomplished using a Windows application. A common example is the use of Outlook to access corporate email from Exchange. While there are native Mac alternatives, the latest and best integrated email features tend to be superior on Windows applications.
In addition, using separate guests to house different application sets can be useful, on either a Mac or Windows (or other) host. This technique enables the creation of a separate “virtual appliance” for each application set, in which the operating system environment within the guest running the application set is specifically tuned to maximize performance and meet the needs of that application set. Fine tuning for multiple application sets within a single operating system environment can result in conflicts. Such conflicts can be avoided by using this virtual appliance approach, in which each application set runs in its own guest, thereby keeping the operating system environments separated. This not only reduces the risk of conflict or interference between environments, but provides a level of granularity that can be extremely convenient. Therefore, Unity or Coherence is frequently used for this reason as well.
When running a guest with a separate operating system on a host, it is also not uncommon to switch user interface context fully into a particular guest for specific tasks best suited to that environment (e.g., software development in general, or more particularly for a target operating system other than that of the host). This involves switching out of Unity/Coherence mode, and utilizing the guest environment immersively in full screen mode. Under the currently existing virtualization tools such as Fusion and Desktop, when immersed within a given guest in full screen mode (as opposed to running guest applications on the host desktop using Unity or Coherence), there is no way to interact unobtrusively with the host or its applications. When key host operating system alerts or events occur (e.g., host operating system going down, host almost out of power), the user can be unceremoniously “yanked” out of the full screen guest operating system user interface in which s/he is working, and thrust into the full screen host operating system user interface in order to react to an important host level warning or the like. Furthermore, currently existing virtualization tools do not provide a way for a user immersed in a first guest user interface to receive user interface notifications from or in a second guest user interface.
It would be desirable to address these issues.